Digital computers are being used today to perform a wide variety of tasks. Many different areas of business, industry, government, education, entertainment, and most recently, the home, are tapping into the enormous and rapidly growing list of applications developed for today's increasingly powerful computer devices.
As computer systems become increasingly ubiquitous and widespread, there is increasing interest in improving the performance and software execution speed of the computer systems. One method of increasing performance is to reduce unnecessary idle time by increasing the number of software based processes which may be executing on a given processor. Modern operating systems support multitasking, wherein two or more comparatively independent software processes execute during runtime on a common computer system.
Accordingly, one of the most important tasks of an operating system kernel is to manage processes. Generally, a process is a program sequence of instructions (sometimes referred to as “threads”) in execution. The execution of the program sequence creates a processor state, or CPU state, stored within the various registers and memory locations of the processor. Thus, when processes are changed, or switched, the processor state, or context, is correspondingly switched. During a context switch, the state of the old process is saved and the state of the new process is loaded. This means that context switching is generally pure overhead because the computer system does not perform any work when a switch occurs. For example, a typical context switch can take between 100 and 1000 instructions and happen as frequently as 400 times a second. Additionally, the instructions required to implement context switches typically involve accesses (both reads and writes) to main memory, which can be very time consuming. Thus, frequent context switching of large amounts of processor state data can be a major factor in overall computer system performance.
The performance penalties involved in context switching large amounts of processor state data has become an important design consideration with new generations of CPUs. For example, increasing the size and number of general purpose registers provides advantages for some performance aspects. However, increasing the size and number of general purpose registers also increases the amount of processor state data that must be saved and restored on context switches.
Similarly, there are many instances where a processor architecture can be modified with added, special purpose functional hardware (e.g., multi-port memory look up tables, large register sets, and the like) to improve the performance of certain software applications. However, such modifications are often forgone, due to the unacceptable performance penalties associated with the resulting large amount of added processor state data.
Thus, prior art context switching methods, wherein the operating system saves and restores large amounts of processor state data on every context switch, impose an excessive system performance burden, and decrease overall processor throughput. The performance burden exists even in a case where none of the processes executing actually use any new functional hardware.
Additionally, for existing processor architectures, there are a number of application compatibility problems with increasing the size of processor state data. Because of this, operating system vendors are loathe to add even small amounts of processor state data to process context. Even if an operating system is modified to support the saving and restoring of some new functional hardware (e.g., added special purpose register state), this newer version of the operating system is then required in order to use the new functionality. Requiring a new version of an operating system in order to obtain the benefit of a new feature can be a significant barrier to acceptance. Many customers prefer to upgrade their hardware and operating system software separately.
Another prior art approach is to add such processor state data, but to restrict its use to a single privileged process (e.g., the one or two applications for which the new functional hardware is added). This approach has been used before with special graphics hardware, for example, but severely limits the usefulness of the new feature. Such restrictions on use tend to go against the nature of general purpose of CPUs.
Thus the prior art is problematic in that computer systems and their applications are often constrained in situations where improvements or optimizations to processor hardware causes an increase in the amount of processor state data. Additionally, the prior art is problematic in that context switching tends to be handled in a standardized fashion regardless of any particular requirements of a given process, thus guaranteeing the imposition of performance penalties.